/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MainPackage;

import java.io.File;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.ListModel;
import javax.xml.bind.JAXB;
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author n.kaminski d.chauvistre
 */
@XmlRootElement( name="NahrungsmittelList")
public class NahrungsmittelList {
    
    private List<Nahrungsmittel> nahrungsmittel = new ArrayList<Nahrungsmittel>();
    
    public NahrungsmittelList() throws JAXBException, NoSuchAlgorithmException{
        //nichts!!!!!!
    }
    
    /**
     * Laedt die Nahrungsmittel aus der Food.xml Datei.
     */
    public static NahrungsmittelList loadNahrungsmittelList(){
        File file= new File(Options.NAHRUNGSMITTELXMLPATH);
        NahrungsmittelList nl = null;
        try{
            nl = new NahrungsmittelList();
        }catch(Exception ex){
            //
        }
        if(file.exists()){
            nl = JAXB.unmarshal(file, NahrungsmittelList.class);
        }
        if(Options.DEBUG){
            System.out.println("Es gibt "+nl.nahrungsmittel.size()+" Nahrungsmittel");
        }
        return nl;
    }
    
    /**
     * Exportiert/Speichert die Nahrungsmittel in der Food.xml Datei ab.
     */
    public void export(){
        
        File file = new File(Options.NAHRUNGSMITTELXMLPATH);
        JAXB.marshal(this, file);
    }
    
    /**
     * Fügt Nahrungsmittel der Liste hinzu
     * @param nahrungsmittel 
     */
    public void addNahrungsmittel(Nahrungsmittel nm){
        if(true){
            this.nahrungsmittel.add(nm);
        }
    }
    
    /**
     * Gibt Nahrungsmittel anhand der speziellen ID zurück
     * @param NahrungsmittelID spezielle ID
     * @return Nahrungsmittel
     */
    public Nahrungsmittel getNahrungsmittelbyID(int NahrungsmittelID){
        for(int i = 0; i < nahrungsmittel.size(); ++i){
            if(nahrungsmittel.get(i).getNahrungsmittelID() == NahrungsmittelID)
                return nahrungsmittel.get(i);
        }
        return null;
    }
    
    /**
     * Gibt Nahrungsmittel anhand des Indexes in der Liste zurück
     * @param id Index in Liste
     * @return Nahrungsmittel
     */
    public Nahrungsmittel getNahrungsmittelbyIndex(int id){
        return this.nahrungsmittel.get(id);
    }
    
    /**
     * Ersetzt ein Nahrungsmittel an einem bestimmten Index in der Liste.
     * Nötig für Bearbeitung vorhandener Nahrungsmittel
     * @param N zu bearbeitenes Nahrungsmittel
     * @param id Index in Liste
     */
    public void setNahrungsmittelbyIndex(Nahrungsmittel N, int id){
        int nid = this.nahrungsmittel.get(id).getNahrungsmittelID();
        N.setNahrungsmittelID(nid);
         this.nahrungsmittel.set(id, N);
    }
    
    /**
     * Zählt Nahrungsmittel
     * @return Anzahl Nahrungsmittel in Liste
     */
    public int Count (){
        return this.nahrungsmittel.size();
    }
    
    /**
     * Fügt Nahrungsmittelliste in eine JList ein
     * @param liste JList mit Nahrungsmitteln
     */
    public void FillJList(JList liste){
        
        DefaultListModel dlm = new DefaultListModel();
        for(int i = 0; i < this.nahrungsmittel.size(); ++i){
            dlm.add(i, this.nahrungsmittel.get(i).getName());
        }
        
        liste.setModel(dlm);
    }
    
    
    
    //<editor-fold defaultstate="collapsed" desc="Getter & Setter für Attribute">
    @XmlElement( name="Nahrungsmittel")
    public List<Nahrungsmittel> getNahrungsmittel(){
        return this.nahrungsmittel;
    }
    public void setNahrungsmittel(List<Nahrungsmittel> nahrung){
        this.nahrungsmittel = nahrung;
    }
    
    @XmlElement( name="MaxNahrungsmittelID")
    public int getMaxNahrungsmittelID(){
        return Nahrungsmittel.getMaxNahrungsmittelID();
    }
    public void setMaxNahrungsmittelID(int maxNahrungsmittelID){
        Nahrungsmittel.setMaxNahrungsmittelID(maxNahrungsmittelID);
    }
    //</editor-fold>
}

